Android 一步步实现曲线图、折线图、柱状图、雷达图,动态心跳图 | 您所在的位置:网站首页 › css 柱状图与折线图 › Android 一步步实现曲线图、折线图、柱状图、雷达图,动态心跳图 |
本文目录
正文1 MPandroidChart效果图2 本文实现的效果图2.1 其他开源图表项目
3 MPAndroidChart使用教程3.1 **引入依赖或导入module**3.2 在布局中定义3.3 显示坐标数据的marker3.4 Activity中初始化设置LineChart3.5 点击坐标轴任意值的回调3.6 图表填充数据3.7 阴影效果fade_red.xml
4 线条的四种不同效果实现4.1 线条支持的模式4.2 曲线图4.3 折线图4.4 柱状图
5 一键清空图标数据5.1 后端代码5.2 前端代码
6 轨迹线条属性6.1 虚线6.2 实线6.3 颜色
7 线条图示标属性7.1 颜色与形状7.2 形状参数介绍
8 图表背景、边框、网格线修改8.1 修改背景,去掉边框8.2 取消显示网格8.3 X Y轴值的自定义8.4 线条值的更改
9 单表多曲线10 使用MarkerView显示更多详情11 (MP高级进阶)实现动态心跳图
正文
1 MPandroidChart效果图
以下是四种典型的基于MP框架实现的曲线图 首先在初始化时设置 回调监听 chart.setOnChartValueSelectedListener(this); 然后继承OnChartValueSelectedListener接口并重写以下方法 //******************OnChartValueSelectedListener 需要重写以下方法*****************// @Override public void onValueSelected(Entry e, Highlight h) { Log.i("Entry selected", e.toString()); Log.i("LOW HIGH", "low: " + chart.getLowestVisibleX() + ", high: " + chart.getHighestVisibleX()); Log.i("MIN MAX", "xMin: " + chart.getXChartMin() + ", xMax: " + chart.getXChartMax() + ", yMin: " + chart.getYChartMin() + ", yMax: " + chart.getYChartMax()); } @Override public void onNothingSelected() { Log.i("Nothing selected", "Nothing selected."); } //******************OnChartValueSelectedListener 需要重写以上方法*****************// 3.6 图表填充数据 private void setData(int count, float range) { ArrayList values = new ArrayList(); for (int i = 0; i set1 = (LineDataSet) chart.getData().getDataSetByIndex(0); set1.setValues(values); set1.notifyDataSetChanged(); chart.getData().notifyDataChanged(); chart.notifyDataSetChanged(); } else { // create a dataset and give it a type set1 = new LineDataSet(values, "DataSet 1"); set1.setDrawIcons(false); // draw dashed line set1.enableDashedLine(10f, 5f, 0f); // black lines and points set1.setColor(Color.BLACK); set1.setCircleColor(Color.BLACK); // line thickness and point size set1.setLineWidth(1f); set1.setCircleRadius(3f); // draw points as solid circles set1.setDrawCircleHole(false); // customize legend entry set1.setFormLineWidth(1f); set1.setFormLineDashEffect(new DashPathEffect(new float[]{10f, 5f}, 0f)); set1.setFormSize(15.f); // text size of values set1.setValueTextSize(9f); // draw selection line as dashed set1.enableDashedHighlightLine(10f, 5f, 0f); // set the filled area set1.setDrawFilled(true); set1.setFillFormatter(new IFillFormatter() { @Override public float getFillLinePosition(ILineDataSet dataSet, LineDataProvider dataProvider) { return chart.getAxisLeft().getAxisMinimum(); } }); // set color of filled area if (Utils.getSDKInt() >= 18) { // drawables only supported on api level 18 and above Drawable drawable = ContextCompat.getDrawable(this, R.drawable.fade_red); set1.setFillDrawable(drawable); } else { set1.setFillColor(Color.BLACK); } ArrayList dataSets = new ArrayList(); dataSets.add(set1); // add the data sets // create a data object with the data sets LineData data = new LineData(dataSets); // set data chart.setData(data); } } 3.7 阴影效果fade_red.xml 4 线条的四种不同效果实现 4.1 线条支持的模式 public enum Mode { LINEAR, STEPPED, CUBIC_BEZIER, HORIZONTAL_BEZIER } 4.2 曲线图在setData方法中配置LineDataSet的属性 LineDataSet set1; set1 = new LineDataSet(values, "照度"); set1.setMode(LineDataSet.Mode.CUBIC_BEZIER);在setData方法中配置LineDataSet的属性 LineDataSet set1; set1 = new LineDataSet(values, "照度"); set1.setMode(LineDataSet.Mode.LINEAR);在setData方法中配置LineDataSet的属性 LineDataSet set1; set1 = new LineDataSet(values, "照度"); set1.setMode(LineDataSet.Mode.STEPPED);设置X Y轴网格线为虚线(实体线长度、间隔距离、偏移量:通常使用 0) leftYAxis.enableGridDashedLine(10f, 10f, 0f); 8.3 X Y轴值的自定义原理: 重写值方法,返回自定义格式字体,例如300重写为300斤 xAxis.setValueFormatter(new IAxisValueFormatter() { @Override public String getFormattedValue(float value, AxisBase axis) { return value + "斤"; // todo 你自己的值显示方式 } }); 8.4 线条值的更改原理: 重写线条值方法,返回自定义格式字体,例如30重写为30% lineDataSet.setValueFormatter(new IValueFormatter() { @Override public String getFormattedValue(float value, Entry entry, int dataSetIndex, ViewPortHandler viewPortHandler) { return value + "%"; } }); 9 单表多曲线一个LineDataSet就是一条曲线,需要两条曲线的时候 在创建一个LineDataSet 添加进去即可,这里封装为一个方法 /** * 添加曲线 */ private void addLine(List yourBeanList, String name, int color) { List entries = new ArrayList(); for (int i = 0; i LightBean lightBean = ((MainActivity) getActivity()).getCurrentLightBean(); if (lightBean == null) { ToastUtil.showToastLong("请先连接设备"); return; } float val = 0; if ((this instanceof ManualColorTemperatureFragment)||(this instanceof AutoColorTemperatureFragment)){ val = lightBean.getColorTemperature(); if (maxColorTemperatureValue val = lightBean.getIllumination(); if (maxIlluuminanceValue //在UI线程操作动态刷新 set1.notifyDataSetChanged(); chart.getData().notifyDataChanged();//更新曲线图数据 chart.notifyDataSetChanged();//刷新表 chart.moveViewToX(pointCount);//更新X轴位置 }); /**************************************************************************/ setAvg(); if (this instanceof ManualColorTemperatureFragment) ((ManualFragment) getParentFragment()).addDataListView(); } |
CopyRight 2018-2019 实验室设备网 版权所有 |